
1971年，John S. Walther对基本CORDIC算法进行了改进。改进后的CORDIC算法不仅可以计算正弦和余弦函数，还可以计算乘法、除法、平方根、对数函数、双曲函数和反三角函数。这极大地丰富了CORDIC算法的适用范围。改进后的算法称为“通用CORDIC算法”(Unified CORDIC Algorithm)。

首先将线性坐标系，圆坐标系和双曲线坐标系整合到一起，并用一个变量$m$予以区分如表$\ref{table_variable_m}$所示。

\begin{table}
	\centering
	\begin{tabular}{l l}
		\hline
		$m$值 & 坐标系类型 \\
		\hline
		$m = -1$ & 双曲线坐标系 \\
		$m = 0$ & 线性坐标系 \\
		$m = 1$ & 圆坐标系 \\
		\hline
	\end{tabular}
	\caption{m值与坐标类型的关系}
	\label{table_variable_m}
\end{table}

设坐标系内有一点$P_{i}=\begin{bmatrix}x_{i} & y_{i}\end{bmatrix}^{T}$，则$R_{i}$为该点在x轴上的投影与坐标原点的距离，$\theta_{i}$为由坐标原点至$P_{i}$点所组成的线段与x轴的夹角。现定义一个新的点$P_{i+1}$，且其与点$P_{i}$的关系为

\begin{equation}
	P_{i+1} = \begin{bmatrix}
		1 & m\delta_{i} \\
		-\delta_{i} & 1
	\end{bmatrix}P_{i}
\end{equation}

其中

\begin{equation}
	\delta_{i} = 2^{-F_{i}}
\end{equation}

$F_{i}$的取值参见表$\ref{table_Fi_range}$

\begin{table}
	\centering
	\begin{tabular}{l l l}
		\hline
		$m$值 & $F_{i}$ & 注释 \\
		\hline
		$-1$ & $1, 2, 3, 4, 4, 5, 6, ...$ & \begin{tabular}{l}1. 设$q=4$ \\ 2. 当$F_{i}$中出现$q$，则$F_{i+1}$也等于$q$ \\ 3. $q=3q+1$ \end{tabular} \\
		\hline
		$0$ & $1, 2, 3, i+1, ...$ & \\
		\hline
		$1$ & $0, 1, 2, i, ...$ & \\
		\hline
	\end{tabular}
	\caption{$F_{i}$的取值}
	\label{table_Fi_range}
\end{table}

在此对$P_{i}$引入一个新分量$z$，以追踪角度的总改变量

\begin{equation}
	z_{i+1} = z_{i} + \Delta\theta_{i}
\end{equation}

其中

\begin{equation}
	\begin{split}
		\Delta\theta_{i} &= \frac{\tan^{-1}\left(\sqrt{m}\delta_{i}\right)}{\sqrt{m}} \\
		&= \left\{\begin{array}{l l}
    		 \tanh^{-1}(2^{-F_{i}}) & 当m=-1\\
    		 2^{-F_{i}} & 当m=0 \\
    		 \tan^{-1}(2^{-F_{i}}) & 当m=1
  		\end{array} \right .
	\end{split}
\end{equation}

类似的，在$N$步迭代之后可得$P_{N}$为

\begin{equation}
	P_{N} = \begin{bmatrix}
		K\cos(\theta\sqrt{m}) & K\sqrt{m}\sin(\theta\sqrt{m}) & 0 \\
		-K\sqrt{m}\sin(\theta\sqrt{m}) & K\cos(\theta\sqrt{m}) & 0 \\
		0 & 0 & 1
	\end{bmatrix} P_{0} + \begin{bmatrix}
		0 \\ 0 \\ \theta
	\end{bmatrix}
\end{equation}

其中

\begin{equation}
	\theta = \sum_{i=0}^{N-1}\Delta\theta_{i}
\end{equation}

\begin{equation}
	K = \prod_{i=0}^{N-1}\left(\sqrt{1+m\delta_{i}^{2}}\right)
\end{equation}

为了计算所需要的函数，在确定$m$的值以后，选择迭代$y \to 0$或$z \to 0$。则迭代结束后$P_{N}$的分量就会保存有如表$\ref{table_ucordic_results_ana_y0}$与表$\ref{table_ucordic_results_ana_z0}$所示的结果。
\begin{table}
	\centering
	\begin{tabular}{l c c c}
		\hline
		$m$值 & $m=-1$ & $m=0$ & $m=1$ \\
		\hline
		$x_{n}$ & $K\sqrt{x_{0}^{2} - y_{0}^{2}}$ & $x_{0}$ & $K\sqrt{x_{0}^{2} + y_{0}^{2}}$ \\
		$y_{n}$ & 0 & 0 & 0 \\
		$z_{n}$ & $z_{0} + \tanh^{-1}\frac{y_{0}}{x_{0}}$ & $z_{0} + \frac{y_{0}}{x_{0}}$ & $z_{0} + \tan^{-1}\frac{y_{0}}{x_{0}}$ \\
		$K$ & $K=\prod_{i=0}^{N-1}\sqrt{1-\delta_{j}^{2}}$ & 1 & $K=\prod_{i=0}^{N-1}\sqrt{1+\delta_{j}^{2}}$ \\
		\hline
	\end{tabular}
	\caption{通用CORDIC算法的结果集（一）（$y \to 0$）}
	\label{table_ucordic_results_ana_y0}
\end{table}

\begin{table}
	\centering
	\begin{tabular}{l c c c}
		\hline
		$m$值 & $m=-1$ & $m=0$ & $m=1$ \\
		\hline
		$x_{n}$ & $K(x_{0}\cosh z_{0} + y_{0}\sinh z_{0})$ & $x_{0}$ & $K(x_{0}\cos z_{0} - y_{0}\sin z_{0})$ \\
		$y_{n}$ & $K(y_{0}\cosh z_{0} + x_{0}\sinh z_{0})$ & $y_{0} + z_{0} \times x_{0}$ & $K(y_{0}\cos z_{0} + x_{0}\sin z_{0})$ \\
		$z_{n}$ & 0 & 0 & 0 \\
		$K$ & $K=\prod_{i=0}^{N-1}\sqrt{1-\delta_{j}^{2}}$ & 1 & $K=\prod_{i=0}^{N-1}\sqrt{1+\delta_{j}^{2}}$ \\
		\hline
	\end{tabular}
	\caption{通用CORDIC算法的结果集（二）（$z \to 0$）}
	\label{table_ucordic_results_ana_z0}
\end{table}

